package org.example.demo;

import org.example.entity.Student;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Demo07 {
    public static void main(String[] args) {
        // 创建学生对象
        List<Student> studenList = Arrays.asList(
                new Student("张无忌", 18, "男"),
                new Student("杨不悔", 16, "女"),
                new Student("周芷若", 19, "女"),
                new Student("宋青书", 20, "男")
        );
        // 这里定义规则
        System.out.println(filter(studenList, student -> student.getAge() < 18));
        System.out.println(filter(studenList, student -> "男".equals(student.getSex())));
        System.out.println(filter(studenList, student -> "男".equals(student.getSex()) && student.getAge() <= 18));
    }

    // 参数 新增规则
    static List<Student> filter(List<Student> studentList, Lambda lambda) {
        List<Student> result = new ArrayList<>();
        for (Student student : studentList) {
            // 这里使用规则
            if (lambda.test(student)) {
                result.add(student);
            }
        }
        return result;
    }

    // 创建函数化对象
    // 为什么是接口那？
    // 因为接口没有具体的实现，只定义规则，实现需要自己写，
    // 而类的化，在定义的时候，就需要把实现写好，
    // 所以用接口
    interface Lambda {
        boolean test(Student student);
    }
}
